API Gateway の HTTP 統合で VPC 内のリソースにアクセスできないときの対処方法
困っていた内容
Amazon API Gateway を使用して REST API を構築中です。 HTTP 統合タイプのエンドポイント URL として EC2 のプライベート IP アドレスを指定しました。
テストリクエストを行うと{"message": "Internal server error"}
が発生します。
正常に VPC にリクエストを流すにはどうしたら良いでしょうか。
なお、実行ログには次のエラーが記録されていました。
Execution failed due to configuration error: Invalid endpoint address
どう対応すればいいの?
統合タイプとして「プライベート統合」を検討してください。
API Gateway プライベート統合の設定 - Amazon API Gateway
API Gateway のプライベートな統合により、VPC 内にある HTTP/HTTPS リソースを VPC 外のクライアントがアクセスできるように簡単に公開できます。プライベート VPC リソースへのアクセスを VPC 境界を超えて拡張するために、プライベート統合で API を作成できます。
HTTP 統合タイプのバックエンドはパブリックに到達可能な必要があり、パブリック IP アドレスを持たない EC2 等のプライベートリソースには接続できません。
VPC 内のプライベートなリソースをバックエンドとして指定する場合、VPC 内に構築した NLB 経由でアクセスするプライベート統合(VPC リンク)をご検討ください。
- Amazon API Gatewayのプライベート統合をHTTP・RESTそれぞれでやってみた | DevelopersIO
- チュートリアル: API Gateway のプライベート統合を使用して REST API をビルドする - Amazon API Gateway
また、EC2 にパブリック IP アドレスを付与するなど、バックエンドをパブリックに到達可能な構成に変更することも選択肢となります。パブリックな構成に変更する場合は、必要に応じて IP アドレス制限等もご検討ください。
参考資料
- [AWS Black Belt Online Seminar]Amazon API Gateway サービスカットシリーズ
API設定 - 統合タイプ(HTTP) 任意のHTTPエンドポイントURLをバックエンドとして呼び出すタイプ (Publicに到達可能であれば、インターネットやEC2等を問わない)
- API Gateway の無効なエンドポイントアドレスエラーのトラブルシューティング | AWS re:Post
- AWS IP アドレスの範囲 - Amazon Virtual Private Cloud
サービス IP アドレス範囲のサブセット。API_GATEWAY にリストされているアドレスは送信専用です。
…(中略)…
有効な値: AMAZON | AMAZON_APPFLOW | AMAZON_CONNECT | API_GATEWAY